<?php
/**
 * 重庆柯一网络有限公司
 * 遵循MT协议，开源并可商业使用，没有任何限制
 * @Author:cqkyi
 * @Date: 2020/9/13 19:03
 * 官方惟一地址：www.cqkyi.com
 */

namespace app\common\service;


use app\common\utils\Res;

use Firebase\JWT\BeforeValidException;
use Firebase\JWT\ExpiredException;
use Firebase\JWT\JWT;
use Firebase\JWT\SignatureInvalidException;


class JwtService
{
    /**
     * @param $data
     * 生成token
     * api后台接口使用
     */
    public static function getToken($data){
        $key = "!@#$%*&cqkyi";//添加token的难度
        $token=[
            "iss"=>$key,
            "aud"=>'',          //面象的用户，可以为空
            "iat"=>time(),      //签发时间
            "nbf"=>time()+3,    //在什么时候jwt开始生效  （这里表示生成100秒后才生效）
            "exp"=> time()+7200,//token的有效期
            "data"=>$data
        ];
        $jwt = JWT::encode($token, $key, "HS256");
        return $jwt;
    }

    public static function checkToken($token){
        $key='!@#$%*&cqkyi';
        try{
            JWT::$leeway = 60;//当前时间减去60，把时间留点余地
            $decoded =JWT::decode($token,$key,array('HS256')); //HS256方式，这里要和签发的时候对应
            $arr = (array)$decoded;
            $arr['code']=200;
            return $arr;

        }catch (SignatureInvalidException $e){
            return  Res::tokenMsg('签名不正确');
        }catch (BeforeValidException $beforeValidException){
            return Res::tokenMsg('token失效');
        }catch (ExpiredException $expiredException){
            return Res::tokenMsg('token过期');
        }catch (\Exception $exception){
            return Res::tokenMsg('未知错误');
        }

    }

}